<?php

/**
 * Description of RepoDescuento
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoDescuento extends Repositorio
{

  function __construct()
  {
    $this->tabla = "descuento";
    $this->id = "idDescuento";
  }

  function agregar(Descuento $descuento)
  {
    try
    {

      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "INSERT INTO " . $this->tabla . "(nombre, valor, es_porcentaje, usuario, deshabilitado) values (";
      $query .= "'" . $descuento->getNombre() . "', ";
      $query .= $descuento->getValor() . ", ";
      $query .= ($descuento->getEsPorcentaje() ? 1 : 0) . ", ";
      $query .= "'" . $descuento->getUsuario() . "', ";
      $query .= $descuento->getDeshabilitado() ? 1 : 0 . ")";
      $result = $this->PostSQL($query);
      if ($result)
      {
        $this->commitTransaction();
      } else
      {
        $this->rollbackTransaction();
      }
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function modificar(Descuento $descuento)
  {
    try
    {
      $link = $this->OpenDB();
      $this->beginTransaction();
      if ($this->VerificarVersion($descuento->getVersion(), $descuento->getId()))
      {
        $query = "UPDATE " . $this->tabla . " SET ";
        $query .= "nombre = '" . $descuento->getNombre() . "', ";
        $query .= "valor = " . $descuento->getValor() . ", ";
        $query .= "es_porcentaje = " . ($descuento->getEsPorcentaje() ? 1 : 0) . ", ";
        $query .= "usuario = '" . $descuento->getUsuario() . "', ";
        $query .= "deshabilitado = " . ($descuento->getDeshabilitado() ? 1 : 0);
        $query .= " WHERE " . $this->id . " = " . $descuento->getId();
        $result = $this->PostSQL($query);
        $this->commitTransaction();
        $this->CloseDB($link);
        return $result;
      } else
      {
        $this->rollbackTransaction();
        $this->CloseDB($link);
        throw new Exception("El registro ha sido modificado por otro usuario", ERROR_VERSION);
      }
    } catch (Exception $ex)
    {
      return $ex->getCode() + "|" + $ex->getMessage();
    }
  }

  function buscar($id)
  {
    $link = $this->OpenDB();
    $queryTxt = "SELECT  nombre, valor, es_porcentaje, usuario, deshabilitado, CONVERT(BIGINT,version) AS version
      FROM " . $this->tabla . " WHERE " . $this->id . " = " . $id;
    $query = $this->GetSQL($queryTxt);
    $descuento = new Descuento();
    $descuento->setNombre($query[0]->nombre);
    $descuento->setValor($query[0]->valor);
    $descuento->setVersion($query[0]->version);
    $descuento->setDeshabilitado($query[0]->deshabilitado);
    $descuento->setEsPorcentaje($query[0]->es_porcentaje);
    $descuento->setUsuario($query[0]->usuario);
    $descuento->setId($id);
    $this->CloseDB($link);
    return $descuento;
  }

  function listarHabilitados()
  {
    $link = $this->OpenDB();
    $query = "SELECT idDescuento, nombre, valor, es_porcentaje, CONVERT(BIGINT,version) AS version FROM " . $this->tabla . " WHERE deshabilitado = 0";
    $descuentosObj = $this->GetSQL($query);
    $descuentos = null;
    foreach ($descuentosObj as $descuentoObj)
    {
      $descuento = new Descuento();
      $descuento->setValor($descuentoObj->valor);
      $descuento->setEsPorcentaje($descuentoObj->es_porcentaje);
      $descuento->setNombre($descuentoObj->nombre);
      $descuento->setId($descuentoObj->idDescuento);
      $descuento->setVersion($descuentoObj->version);
      $descuento->setDeshabilitado(0);
      $descuentos[] = $descuento;
    }
    $this->CloseDB($link);
    return $descuentos;
  }

}

?>
